]> dgit.raspbian.org Git - ostree.git/log
ostree.git
2 months agoSkip test-admin-deploy-uboot.sh on s390x
Simon McVittie [Thu, 26 Oct 2023 10:26:04 +0000 (11:26 +0100)]
Skip test-admin-deploy-uboot.sh on s390x

It fails on a porterbox. ostree hard-codes zipl to be used on s390x,
so it's reasonable that tests for other bootloaders might not work.

Bug: https://github.com/ostreedev/ostree/issues/3086
Forwarded: no

Gbp-Pq: Topic debian
Gbp-Pq: Name Skip-test-admin-deploy-uboot.sh-on-s390x.patch

2 months agotest-sysroot: Skip on s390x by default
Simon McVittie [Tue, 6 Dec 2022 10:59:33 +0000 (10:59 +0000)]
test-sysroot: Skip on s390x by default

This test regularly fails on the buildds, but I cannot reproduce the
failure on a porterbox.

Bug: https://github.com/ostreedev/ostree/issues/2527
Bug-Debian: https://bugs.debian.org/1025532
Forwarded: not-needed

Gbp-Pq: Topic debian
Gbp-Pq: Name test-sysroot-Skip-on-s390x-by-default.patch

2 months agoSkip test-pull-repeated during CI
Simon McVittie [Mon, 30 Jul 2018 15:51:01 +0000 (16:51 +0100)]
Skip test-pull-repeated during CI

This test is expected to fail a small proportion of the time. During
the build of ostree 2018.7-1 in Debian, it seems we were unlucky on
s390x. Non-deterministic tests are also problematic for autopkgtest,
where they can gate migration of our dependencies like GLib, so skip
this test unless the caller has opted-in to non-deterministic tests.

It would be appropriate to enable this test in environments where
failures can easily be retried and are not disruptive to other
packages.

Signed-off-by: Simon McVittie <smcv@debian.org>
Gbp-Pq: Topic debian
Gbp-Pq: Name Skip-test-pull-repeated-during-CI.patch

2 months agoRelease
Simon McVittie [Sun, 5 Jul 2026 20:40:01 +0000 (21:40 +0100)]
Release

2 months agoUse dpkg build API v1
Simon McVittie [Sun, 5 Jul 2026 10:57:20 +0000 (11:57 +0100)]
Use dpkg build API v1

2 months agod/control: Stop running dwz
Simon McVittie [Sun, 5 Jul 2026 10:37:15 +0000 (11:37 +0100)]
d/control: Stop running dwz

2 months agoBump debhelper compat level to 14
Simon McVittie [Sun, 5 Jul 2026 10:15:54 +0000 (11:15 +0100)]
Bump debhelper compat level to 14

- Remove ${misc:Depends} etc., now added automatically
- Temporarily add dh-sequence-dwz build-dep for less diffoscope noise

2 months agoNew upstream release
Simon McVittie [Sun, 5 Jul 2026 10:14:32 +0000 (11:14 +0100)]
New upstream release

2 months agoUpdate upstream source from tag 'upstream/2026.2'
Simon McVittie [Sun, 5 Jul 2026 10:10:19 +0000 (11:10 +0100)]
Update upstream source from tag 'upstream/2026.2'

Update to upstream version '2026.2'
with Debian dir 41b5289bd97de17ca7f65f7e74b8cd77343c391a

2 months agoNew upstream version 2026.2
Simon McVittie [Sun, 5 Jul 2026 10:10:09 +0000 (11:10 +0100)]
New upstream version 2026.2

2 months agoRelease 2026.2
Joseph Marrero Corchado [Wed, 1 Jul 2026 17:06:42 +0000 (13:06 -0400)]
Release 2026.2

2 months agoMerge pull request #3604 from jmarrero/ci-fixes3
Colin Walters [Tue, 30 Jun 2026 19:02:37 +0000 (15:02 -0400)]
Merge pull request #3604 from jmarrero/ci-fixes3

Ci fixes3

2 months agoci: Remove Prow and coreos-ci Jenkins infrastructure
Joseph Marrero Corchado [Mon, 29 Jun 2026 19:30:59 +0000 (15:30 -0400)]
ci: Remove Prow and coreos-ci Jenkins infrastructure

Remove the legacy CI artifacts that are no longer in use:

- ci/prow/: No-op placeholder Dockerfile and script that were kept
  while waiting for the job to be removed from openshift/release.
  Remove them entirely so Prow stops running on every PR.
- .cci.jenkinsfile: Orphaned coreos-ci Jenkins pipeline. Not
  referenced by anything in the repo and superseded by GitHub
  Actions and Konflux.
- ci/installdeps.sh: Remove stale comment referencing the Prow job.

The Prow job was already removed from openshift/release:
https://github.com/openshift/release/pull/81042

2 months agotests: Fix "remote:branch" test to use ostree_parse_refspec
Joseph Marrero Corchado [Mon, 29 Jun 2026 19:22:19 +0000 (15:22 -0400)]
tests: Fix "remote:branch" test to use ostree_parse_refspec

ostree_validate_rev() validates bare ref names and does not accept
the "remote:ref" refspec syntax — the colon is not part of the
OSTREE_REF_REGEXP regex. The "remote:branch" form is a refspec,
which is parsed by ostree_parse_refspec().

Replace the incorrect ostree_validate_rev() call with
ostree_parse_refspec() and verify the parsed remote and ref
components, preserving the original test intent.

Fixes: ac10a27d ("pull: Fix GLib assertion crash on invalid UTF-8 ref names")
2 months agotests: Run clang-format on test-validate-utf8.c
Joseph Marrero Corchado [Mon, 29 Jun 2026 19:16:31 +0000 (15:16 -0400)]
tests: Run clang-format on test-validate-utf8.c

The file introduced in commit ac10a27d was not run through
clang-format before merging. Reformat the invalid_333 char array
initializer to comply with the project's .clang-format rules.

Fixes the clang-format-check CI job failure.

2 months agoMerge pull request #3583 from jmarrero/fix-double-quote-karg
Colin Walters [Mon, 29 Jun 2026 17:48:46 +0000 (13:48 -0400)]
Merge pull request #3583 from jmarrero/fix-double-quote-karg

kargs: Fix crash on quoted values in /proc/cmdline

2 months agoMerge pull request #3597 from zhaohuiw42/p-fix-glib-asseition
Colin Walters [Fri, 26 Jun 2026 19:49:04 +0000 (21:49 +0200)]
Merge pull request #3597 from zhaohuiw42/p-fix-glib-asseition

pull: Fix GLib assertion crash on invalid UTF-8 ref names

2 months agoMerge pull request #3598 from zhaohuiw42/p-fix-space-size-validation
Colin Walters [Fri, 26 Jun 2026 18:35:40 +0000 (20:35 +0200)]
Merge pull request #3598 from zhaohuiw42/p-fix-space-size-validation

repo: Fix validation for min-free-space-percent config option

2 months agoMerge pull request #3587 from jmarrero/fix-staged-bootconfig-extra-merge
Colin Walters [Fri, 26 Jun 2026 17:52:58 +0000 (19:52 +0200)]
Merge pull request #3587 from jmarrero/fix-staged-bootconfig-extra-merge

sysroot: Merge bootconfig-extra from previously staged deployment

2 months agokargs: Fix crash on quoted values in /proc/cmdline
Joseph Marrero Corchado [Mon, 13 Apr 2026 02:20:38 +0000 (22:20 -0400)]
kargs: Fix crash on quoted values in /proc/cmdline

Bootloaders like GRUB may reformat quoted kernel arguments, producing
entries like "testparam=value with spaces" in /proc/cmdline. The
proc-cmdline parser was still using a naive space split (pre-dating the
quote-aware splitter added in abc7d5b9), so these tokens got broken
apart and hit a g_assert_false() abort downstream.

Use the quote-aware splitter for /proc/cmdline too, and downgrade the
unterminated-quote assert to g_debug() since we can't control what
bootloaders emit.

Reported by Arch Linux maintainers building ostree 2026.1.

Closes: https://github.com/ostreedev/ostree/issues/3582
Assisted-by: OpenCode (Claude Opus 4.6)
Signed-off-by: Joseph Marrero Corchado <jmarrero@redhat.com>
2 months agoMerge pull request #3602 from jmarrero/ci-fixes2
Colin Walters [Fri, 26 Jun 2026 12:41:10 +0000 (14:41 +0200)]
Merge pull request #3602 from jmarrero/ci-fixes2

tests/kolainst: Fix failures on container-native FCOS

2 months agoMerge pull request #3601 from nikita-dubrovskii/switch_to_pvimg
Colin Walters [Fri, 26 Jun 2026 12:29:07 +0000 (14:29 +0200)]
Merge pull request #3601 from nikita-dubrovskii/switch_to_pvimg

zipl: Switch from genprotimg to pvimg for SE boot image generation

2 months agotests/kolainst: Fix failures on container-native FCOS
Joseph Marrero Corchado [Fri, 26 Jun 2026 03:44:19 +0000 (23:44 -0400)]
tests/kolainst: Fix failures on container-native FCOS

On container-native FCOS (F44+), /etc/ostree/remotes.d/ may have no
.conf files since the system uses container-based updates rather than
traditional ostree remotes. This caused test failures:

- staged-deploy.sh and finalization.sh: sed on the unexpanded glob
  '/etc/ostree/remotes.d/*.conf' fails under set -euo pipefail when
  no files match. Fix by iterating with a for loop and guarding with
  test -f.

- itest-remotes.sh: 'ostree remote list' returns empty, hitting
  assert_not_reached. Fix by skipping the test gracefully on systems
  with no remotes configured.

Assisted-by: OpenCode (Claude Opus 4.6)
Signed-off-by: Joseph Marrero Corchado <jmarrero@redhat.com>
2 months agosysroot: Merge bootconfig-extra from previously staged deployment
Joseph Marrero Corchado [Sat, 9 May 2026 19:18:07 +0000 (15:18 -0400)]
sysroot: Merge bootconfig-extra from previously staged deployment

When a staged deployment is replaced by a new one (e.g. bootc sets
source-tracked kargs, then rpm-ostree appends a karg before reboot),
the bootconfig-extra keys from the first staging were lost. The new
staging only checked the new deployment's bootconfig (always empty)
and fell back to the merge deployment's bootconfig (the booted BLS
file), which had no knowledge of what was in the previous staged
GVariant.

Fix this by merging bootconfig-extra from three sources in priority
order:

  1. Merge deployment's bootconfig (lowest priority)
  2. Previously staged deployment's bootconfig-extra
  3. New deployment's bootconfig (highest priority)

This ensures that x-options-source-* keys set by one consumer survive
re-staging by another consumer on the same boot.

Assisted-by: OpenCode (Claude Opus 4.6)
Signed-off-by: Joseph Marrero Corchado <jmarrero@redhat.com>
2 months agozipl: Switch from genprotimg to pvimg for SE boot image generation
Nikita Dubrovskii [Thu, 25 Jun 2026 11:00:11 +0000 (13:00 +0200)]
zipl: Switch from genprotimg to pvimg for SE boot image generation

el9, el10 and rhel-9.6 now ship s390utils-base >= 2.36.0, which
replaces the obsolete genprotimg tool with pvimg. Update the Secure
Execution boot image generation to use 'pvimg create' with long-form
flags (--kernel, --ramdisk, --parmfile, --output).

The pvimg tool natively supports the --overwrite option, eliminating
the need to manually remove the existing sdboot image before
regeneration.

2 months agoMerge pull request #3600 from jmarrero/drop-prow
Colin Walters [Thu, 25 Jun 2026 01:12:32 +0000 (03:12 +0200)]
Merge pull request #3600 from jmarrero/drop-prow

ci/prow: Make jobs no-op in preparation for removal

2 months agoci/prow: Make jobs no-op in preparation for removal
Joseph Marrero Corchado [Wed, 24 Jun 2026 22:35:34 +0000 (18:35 -0400)]
ci/prow: Make jobs no-op in preparation for removal

Replace the Dockerfile and e2e script with no-op placeholders.
The jobs will be fully removed from openshift/release separately.

Ref: https://github.com/openshift/release/pull/81042
Assisted-by: OpenCode (Claude Opus 4.6)
Signed-off-by: Joseph Marrero Corchado <jmarrero@redhat.com>
2 months agoMerge pull request #3599 from jmarrero/ci-fixes
Colin Walters [Wed, 24 Jun 2026 21:43:43 +0000 (23:43 +0200)]
Merge pull request #3599 from jmarrero/ci-fixes

multiple CI fixes

2 months agoci/prow: Use RPMs with dnf instead of raw file overlay
Joseph Marrero Corchado [Wed, 24 Jun 2026 15:20:21 +0000 (11:20 -0400)]
ci/prow: Use RPMs with dnf instead of raw file overlay

The builder and coreos-assembler images may ship different library
versions (e.g. gpgme), causing soname mismatches at runtime. Use RPM
overrides for cosa and dnf for the container itself.

2 months agoci: Use dnf instead of rpm to install built RPMs in container
Joseph Marrero Corchado [Wed, 24 Jun 2026 14:59:39 +0000 (10:59 -0400)]
ci: Use dnf instead of rpm to install built RPMs in container

This allows dependency resolution to handle soname changes (e.g. gpgme
1.x to 2.x) instead of silently installing mismatched libraries.

2 months agostatic-delta: remove unused total_usize variable
Eric Curtin [Mon, 8 Jun 2026 20:53:06 +0000 (21:53 +0100)]
static-delta: remove unused total_usize variable

In _ostree_delta_get_endianness, total_usize was accumulated across
delta parts but never read or used in any heuristic or output. Remove
the dead variable and its accumulation.

2 months agotrivial-httpd: Fix const-correctness of slash pointer
Khem Raj [Thu, 9 Apr 2026 23:28:07 +0000 (16:28 -0700)]
trivial-httpd: Fix const-correctness of slash pointer

strrchr() returns a 'const char *' when passed a 'const char *'
argument. Declare the local 'slash' variable as 'const char *'
to match, fixing a build failure with clang when
-Werror,-Wincompatible-pointer-types-discards-qualifiers is active.

Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
2 months agorepo: Fix validation for min-free-space-percent config option
wangzhaohui [Wed, 24 Jun 2026 01:00:47 +0000 (09:00 +0800)]
repo: Fix validation for min-free-space-percent config option

Add explicit validation that the string contains only digits before
converting to a number. This ensures invalid values are rejected with
a clear error message.

Fixes: https://github.com/ostreedev/ostree/issues/3274
2 months agopull: Fix GLib assertion crash on invalid UTF-8 ref names
wangzhaohui [Tue, 23 Jun 2026 06:28:31 +0000 (14:28 +0800)]
pull: Fix GLib assertion crash on invalid UTF-8 ref names

When ostree pull or ostree pull-local receives a branch name containing
invalid UTF-8 bytes, g_variant_new_strv() triggers a GLib-CRITICAL
assertion failure on g_utf8_validate(), followed by a NULL pointer
dereference and segmentation fault.

Fixes: https://github.com/ostreedev/ostree/issues/2959
3 months agoMerge pull request #3595 from jonassvatos/checkout-whiteout-variant-leak
Colin Walters [Thu, 11 Jun 2026 19:28:28 +0000 (15:28 -0400)]
Merge pull request #3595 from jonassvatos/checkout-whiteout-variant-leak

checkout: Fix GVariant leak when scanning for opaque whiteouts

3 months agocheckout: Fix GVariant leak when scanning for opaque whiteouts
Jonas Svatos [Thu, 11 Jun 2026 08:02:44 +0000 (10:02 +0200)]
checkout: Fix GVariant leak when scanning for opaque whiteouts

Breaking out of g_variant_iter_loop() leaves ownership of the current
element with the caller. The opaque-whiteout scan in
checkout_tree_at_recurse() breaks out of the loop when it finds a
match, and then cleared the local pointer, leaking one reference to
the extracted checksum variant on every directory that contains an
opaque whiteout entry.

A leaked child variant keeps the whole backing dirtree object alive,
including its GMappedFile when the object was large enough to be
mmap'd rather than read into the heap. In a process that unmounts the
target filesystem afterwards - notably `bootc install to-disk`, which
checks out container layers with process_whiteouts enabled and then
unmounts the physical root - the stale mapping makes the final
`umount -R` fail with EBUSY, aborting the installation.

Since the scan only needs the entry name, pass NULL to skip extracting
the checksum entirely, so nothing needs freeing on the early exit.

Fixes: https://github.com/bootc-dev/bootc/issues/2246
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: Jonas Svatos <jonas.svatos@nfa.cz>
5 months agoRelease to unstable
Simon McVittie [Sat, 11 Apr 2026 12:40:27 +0000 (13:40 +0100)]
Release to unstable

5 months agod/watch: Convert to v5 format
Simon McVittie [Sat, 11 Apr 2026 11:49:35 +0000 (12:49 +0100)]
d/watch: Convert to v5 format

5 months agoStandards-Version: 4.7.4 (no changes required)
Simon McVittie [Sat, 11 Apr 2026 09:54:22 +0000 (10:54 +0100)]
Standards-Version: 4.7.4 (no changes required)

5 months agod/control: Simplify gobject-introspection dependency
Simon McVittie [Sat, 11 Apr 2026 09:53:10 +0000 (10:53 +0100)]
d/control: Simplify gobject-introspection dependency

As suggested in gobject-introspection/README.Debian.gz

5 months agod/control: Replace transitional libselinux1-dev with libselinux-dev
Simon McVittie [Sat, 11 Apr 2026 09:52:14 +0000 (10:52 +0100)]
d/control: Replace transitional libselinux1-dev with libselinux-dev

5 months agoNew upstream release
Simon McVittie [Sat, 11 Apr 2026 09:43:49 +0000 (10:43 +0100)]
New upstream release

5 months agoUpdate upstream source from tag 'upstream/2026.1'
Simon McVittie [Sat, 11 Apr 2026 09:40:17 +0000 (10:40 +0100)]
Update upstream source from tag 'upstream/2026.1'

Update to upstream version '2026.1'
with Debian dir 3ce1bc8488245aa61c44435e098515085468e1b5

5 months agoNew upstream version 2026.1
Simon McVittie [Sat, 11 Apr 2026 09:40:12 +0000 (10:40 +0100)]
New upstream version 2026.1

5 months agoMerge pull request #3581 from jmarrero/release-2026.1
Colin Walters [Fri, 10 Apr 2026 21:27:14 +0000 (17:27 -0400)]
Merge pull request #3581 from jmarrero/release-2026.1

Release 2026.1

5 months agoconfigure: post-release version bump
Joseph Marrero Corchado [Fri, 10 Apr 2026 19:59:51 +0000 (15:59 -0400)]
configure: post-release version bump

5 months agoRelease 2026.1
Joseph Marrero Corchado [Fri, 10 Apr 2026 19:56:25 +0000 (15:56 -0400)]
Release 2026.1

5 months agoMerge pull request #3571 from jmarrero/fix-soft-reboot-var-mount
Colin Walters [Wed, 8 Apr 2026 17:38:30 +0000 (13:38 -0400)]
Merge pull request #3571 from jmarrero/fix-soft-reboot-var-mount

generator: Add DefaultDependencies=no to var.mount for soft-reboot

5 months agogenerator: Fix soft-reboot for var, sysroot, and boot
Joseph Marrero Corchado [Tue, 7 Apr 2026 19:24:45 +0000 (15:24 -0400)]
generator: Fix soft-reboot for var, sysroot, and boot

A bare `systemctl soft-reboot` on ostree/bootc systems was broken in
several ways because the generator and prepare-root were not accounting
for the fact that soft-reboot does not re-run the initramfs.

The var.mount unit had DefaultDependencies=yes, which pulled in implicit
After= dependencies on device units. After soft-reboot, these device
units get stuck in 'tentative' state while udev restarts, causing
var.mount to stall indefinitely. Fix this by setting
DefaultDependencies=no with explicit ordering After=local-fs-pre.target
sysroot.mount.

For /sysroot, systemd auto-generates the mount unit from mountinfo with
Conflicts=umount.target, causing it to be unmounted during soft-reboot
shutdown. Generate a drop-in with DefaultDependencies=no to prevent this.
We use a drop-in because the generator does not know the What= device
parameter — systemd gets that from mountinfo.

For /boot on same-partition setups, move the bind-mount from
ostree-prepare-root into the generator as a full boot.mount unit with
DefaultDependencies=no. This handles normal boot, bare soft-reboot, and
staged deployment soft-reboot uniformly. The static (non-systemd) path
in ostree-prepare-root-static.c retains its own bind-mount since the
generator does not run there.

Validated with plain disk and RAID1 kola tests on FCOS 43.

Fixes: https://issues.redhat.com/browse/RHEL-154075
Assisted-by: OpenCode (Claude Opus 4.6)
Signed-off-by: Joseph Marrero Corchado <jmarrero@redhat.com>
5 months agoMerge pull request #3570 from jmarrero/kargs-source
Colin Walters [Thu, 2 Apr 2026 19:32:14 +0000 (15:32 -0400)]
Merge pull request #3570 from jmarrero/kargs-source

bootconfig: Preserve extension BLS keys across staged deployments

5 months agoMerge pull request #3578 from henrywang/fix-debian-failure
Colin Walters [Thu, 2 Apr 2026 17:56:49 +0000 (13:56 -0400)]
Merge pull request #3578 from henrywang/fix-debian-failure

ci: Fix Debian Test failure

5 months agoci: Make fuse and libfuse-dev conditional for Debian Testing
Xiaofeng Wang [Thu, 2 Apr 2026 03:36:20 +0000 (11:36 +0800)]
ci: Make fuse and libfuse-dev conditional for Debian Testing

The libfuse-dev and fuse (FUSE 2) packages have been removed from
Debian Testing (forky/sid). Move them out of the unconditional package
list and only install them on older Debian/Ubuntu versions that still
provide FUSE 2. FUSE 3 support is already handled via the libfuse3-dev
argument logic.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Xiaofeng Wang <henrywangxf@me.com>
5 months agoci: Install ca-certificates in Debian Testing pre-checkout setup
Xiaofeng Wang [Thu, 2 Apr 2026 02:40:04 +0000 (10:40 +0800)]
ci: Install ca-certificates in Debian Testing pre-checkout setup

The debian:testing-slim image no longer includes ca-certificates by
default, causing the GitHub Actions checkout step to fail with an SSL
CA cert error when fetching the repository over HTTPS.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Xiaofeng Wang <henrywangxf@me.com>
5 months agobootconfig: Preserve extension BLS keys across staged deployments
Joseph Marrero Corchado [Wed, 1 Apr 2026 19:40:45 +0000 (15:40 -0400)]
bootconfig: Preserve extension BLS keys across staged deployments

When a deployment is staged via ostree_sysroot_stage_tree_with_options(),
the deployment metadata is serialized to /run/ostree/staged-deployment
as a GVariant. During finalization at shutdown,
_ostree_sysroot_reload_staged() creates a fresh OstreeBootconfigParser
and only restores the "options" key from the serialized kargs. Any
additional BLS keys that were set on the bootconfig are silently dropped.

The parse/write/clone paths in OstreeBootconfigParser already handle
unknown keys generically (the "Write unknown fields" loop in
write_at()), so keys survive direct deployments and in-memory
operations. The gap is exclusively in the staged deployment roundtrip,
where a fresh bootconfig is rebuilt from just the kargs strv.

This matters for the upcoming bootc `loader-entries set-options-for-source`
feature, which stores kernel argument ownership as extension BLS keys
(e.g. `x-options-source-tuned nohz=full isolcpus=1-3`). On bootc
systems with transient /etc, tools like TuneD lose track of which kargs
they own because their state files are wiped on reboot. Tracking
ownership directly in the BLS config on /boot solves this, but only if
the keys survive staging. systemd-boot, GRUB, and zipl all ignore
unknown BLS keys, so extension keys are safe.

Fix this by following the same pattern used for overlay-initrds:

1. Add _ostree_bootconfig_parser_get_extra_keys_variant() which returns
   all non-standard BLS keys as an a{ss} GVariant. Standard keys
   (title, version, options, linux, initrd, devicetree) are excluded
   since they are rebuilt from scratch during finalization. All other
   keys are preserved, trusting the caller.

2. In ostree_sysroot_stage_tree_with_options(), serialize any extra
   keys as "bootconfig-extra" in the staged GVariant dict. Since
   _ostree_deployment_set_bootconfig_from_kargs() creates a fresh
   bootconfig with only the "options" key, the code falls back to
   the merge deployment's bootconfig for extra keys. This ensures
   keys are inherited across staged deployments without the caller
   needing to re-set them.

3. In _ostree_sysroot_reload_staged(), restore extra keys from the
   "bootconfig-extra" dict onto the deployment's bootconfig via
   ostree_bootconfig_parser_set().

The function is private (_ostree_ prefix) since only ostree's own
staging code uses it. No new public API, no changes to .sym files,
no changes to GIR or Rust bindings.

Backwards compatibility:
- Old ostree ignores the unknown "bootconfig-extra" key in the a{sv}
  dict (extension keys silently lost, same as before this patch).
- New ostree gracefully handles the absence of "bootconfig-extra" in
  staged data written by older versions (g_variant_dict_lookup returns
  FALSE, no restoration attempted).

Assisted-by: OpenCode (Claude claude-opus-4-6)
Signed-off-by: Joseph Marrero Corchado <jmarrero@redhat.com>
5 months agoMerge pull request #3577 from henrywang/add-fmt
Colin Walters [Tue, 31 Mar 2026 19:49:35 +0000 (15:49 -0400)]
Merge pull request #3577 from henrywang/add-fmt

ci: Sync Rust linting checks from bootc-dev/bootc

5 months agoci: Use Justfile targets in GitHub workflow and add missing v2024_7 feature
Xiaofeng Wang [Tue, 31 Mar 2026 07:31:32 +0000 (15:31 +0800)]
ci: Use Justfile targets in GitHub workflow and add missing v2024_7 feature

- Replace inline cargo fmt/clippy commands in rust.yml with just
  cargo-fmt-check and just cargo-clippy for consistency with local dev
- Make Justfile cargo-clippy use CARGO_PROJECT_FEATURES env var
  (defaults to v2022_6) so CI and local use share the same config
- Add missing v2024_7 feature to Cargo.toml to fix cargo doc failure
  caused by unexpected cfg condition

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Xiaofeng Wang <henrywangxf@me.com>
5 months agoci: Add Rust validate targets to Justfile for local development
Xiaofeng Wang [Tue, 31 Mar 2026 07:15:30 +0000 (15:15 +0800)]
ci: Add Rust validate targets to Justfile for local development

Add just targets mirroring the CI Rust checks so developers can run
them locally before pushing:
- validate: runs both fmt and clippy checks
- cargo-fmt-check: checks formatting across all crates
- cargo-clippy: runs clippy with the same lint config as CI

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Xiaofeng Wang <henrywangxf@me.com>
5 months agotests/inst: Remove unused Kill9Stats and RebootStats structs
Xiaofeng Wang [Tue, 31 Mar 2026 07:12:05 +0000 (15:12 +0800)]
tests/inst: Remove unused Kill9Stats and RebootStats structs

These structs were never constructed, flagged by cargo clippy with
-Ddead_code.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Xiaofeng Wang <henrywangxf@me.com>
5 months agotests/xtask: Fix cargo fmt formatting
Xiaofeng Wang [Tue, 31 Mar 2026 04:06:55 +0000 (12:06 +0800)]
tests/xtask: Fix cargo fmt formatting

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Xiaofeng Wang <henrywangxf@me.com>
5 months agoci: Sync Rust linting checks from bootc-dev/bootc
Xiaofeng Wang [Tue, 31 Mar 2026 03:39:04 +0000 (11:39 +0800)]
ci: Sync Rust linting checks from bootc-dev/bootc

Align with bootc's validate target:
- Make cargo clippy gating (was "non-gating") with the same lint config
  as bootc (-A clippy::all -D clippy::correctness -D clippy::suspicious
  -Dunused_imports -Ddead_code)
- Extend clippy to cover test crates (tests/inst, tests/bootc-integration,
  tests/xtask)
- Add cargo doc with -D warnings to catch rustdoc issues

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Xiaofeng Wang <henrywangxf@me.com>
5 months agoci: Extend cargo fmt check to cover all Rust crates
Xiaofeng Wang [Tue, 31 Mar 2026 03:30:08 +0000 (11:30 +0800)]
ci: Extend cargo fmt check to cover all Rust crates

The existing cargo fmt check only covered the ostree workspace package.
Add fmt checks for the standalone test crates (tests/inst,
tests/bootc-integration, tests/xtask) which are separate workspaces.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Xiaofeng Wang <henrywangxf@me.com>
5 months agoMerge pull request #3576 from henrywang/tmt-integration
Colin Walters [Mon, 30 Mar 2026 18:21:34 +0000 (14:21 -0400)]
Merge pull request #3576 from henrywang/tmt-integration

ci: Add Packit CI with RPM builds and TMT integration tests

5 months agoci: Fix cargo build failure on Fedora 43/44 in Containerfile.packit
Xiaofeng Wang [Mon, 30 Mar 2026 12:22:10 +0000 (20:22 +0800)]
ci: Fix cargo build failure on Fedora 43/44 in Containerfile.packit

Set CARGO_HOME=/var/tmp/.cargo to avoid conflict with /root/.cargo
which exists as a non-directory on Fedora 43/44 base images, causing
"failed to create directory: File exists (os error 17)".

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Xiaofeng Wang <henrywangxf@me.com>
5 months agoci: Replace test-tmt shell script with Rust xtask
Xiaofeng Wang [Mon, 30 Mar 2026 08:29:10 +0000 (16:29 +0800)]
ci: Replace test-tmt shell script with Rust xtask

Replace the inline bash script in the Justfile test-tmt target with a
Rust xtask crate (tests/xtask/) that handles TMT plan discovery, bcvk
VM lifecycle, SSH readiness polling, and tmt invocation. This follows
the bootc-dev/bootc cargo xtask run-tmt pattern.

Also fix tests.fmf to pass test names individually with --exact, since
libtest_mimic only accepts a single filter argument.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Xiaofeng Wang <henrywangxf@me.com>
5 months agotests: Remove bcvk VM dispatch from Rust integration tests
Xiaofeng Wang [Mon, 23 Mar 2026 08:55:56 +0000 (16:55 +0800)]
tests: Remove bcvk VM dispatch from Rust integration tests

VM deployment is now handled externally by `just test-tmt` (bcvk + tmt)
or `just integration-container` (bcvk direct SSH). The Rust test binary
runs inside the VM as root, so the require_root/RunMode dispatch logic
is no longer needed.

- Remove require_root(), RunMode enum, and bcvk dispatch code
- Simplify booted_test! and privileged_test! macros to just register
  and run tests directly
- Remove rustix dependency (no longer checking getuid)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Xiaofeng Wang <henrywangxf@me.com>
5 months agoci: Add Packit CI with RPM builds and TMT integration tests
Xiaofeng Wang [Fri, 20 Mar 2026 08:50:58 +0000 (16:50 +0800)]
ci: Add Packit CI with RPM builds and TMT integration tests

Add Packit-based CI pipeline that builds RPMs via COPR and runs TMT
integration tests on bootc image-mode systems. This follows the
bootc-dev/bootc pattern of per-plan VM isolation using bcvk.

Key changes:
- Dockerfile: Add rpmbuild stage, use RPM overlay for rootfs, run
  provision-derived.sh for VM provisioning (cloud-init, rsync, etc.)
- Justfile: Add package target, test-tmt target with bcvk per-plan VMs,
  longer SSH wait for cloud-init first boot
- .github/workflows/bootc.yaml: Split into unit-tests and integration
  jobs, archive TMT logs with PR number in artifact name
- .packit.yaml: COPR builds + TMT tests for centos-stream-9/10 and
  fedora-43/44 on x86_64/aarch64
- tmt/: FMF test plans and shell-based tests (booted verification,
  privileged ostree tests) translated from Rust integration tests
- hack/: Packit provisioning scripts to convert package-mode VMs to
  image-mode via bootc install to-filesystem

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Xiaofeng Wang <henrywangxf@me.com>
6 months agoMerge pull request #3573 from cgwalters/test-revamp
Colin Walters [Thu, 19 Mar 2026 00:48:48 +0000 (20:48 -0400)]
Merge pull request #3573 from cgwalters/test-revamp

ci/tests: Revamp bootc integration test suite with bcvk VM support

6 months agoci: Revamp bootc integration test suite with bcvk VM support
Colin Walters [Tue, 17 Mar 2026 21:00:34 +0000 (21:00 +0000)]
ci: Revamp bootc integration test suite with bcvk VM support

 the old privtest CI job with a new tests/bootc-integration
Rust crate that runs inside a bcvk VM. The old tests/inst crate is
preserved for tests not yet ported.

Tests are split into two tiers based on what they need:

- booted_test!: needs a fully deployed ostree system. Dispatches via
  `bcvk libvirt run` which does `bootc install to-disk`.
- privileged_test!: just needs root. Dispatches via the faster
  `bcvk ephemeral run-ssh`.

The Justfile provides `integration-container` (full suite) and
`integration-ephemeral` (fast privileged-only path). JUnit XML output
is supported via the JUNIT_OUTPUT env var using quick-junit;
integration-container captures results to target/integration-results.xml.

Drop the vendored bootc-ubuntu-setup action in favor of the upstream
bootc-dev/actions/bootc-ubuntu-setup@main.

Assisted-by: OpenCode (Claude claude-opus-4-6)
Signed-off-by: Colin Walters <walters@verbum.org>
6 months agoMerge pull request #3575 from igoropaniuk/fix/respect_tmpdir_in_tests
Colin Walters [Mon, 16 Mar 2026 15:36:23 +0000 (11:36 -0400)]
Merge pull request #3575 from igoropaniuk/fix/respect_tmpdir_in_tests

tests: Respect TEST_TMPDIR for temporary directories

6 months agotests: Respect TEST_TMPDIR for temporary directories
Igor Opaniuk [Mon, 9 Mar 2026 11:04:07 +0000 (12:04 +0100)]
tests: Respect TEST_TMPDIR for temporary directories

Several C tests hardcoded /var/tmp as the base path for temporary
working directories, ignoring the TEST_TMPDIR environment variable
used by the shell test suite.

This caused tests to create their ostree repos on the overlayfs
filesystem even when TEST_TMPDIR points to a real filesystem,
bypassing the intended workaround for overlayfs's inaccurate
free-space reporting. As a result, ostree's min-free-space-percent
check (default 3%) would fire when writing content objects, making
tests fail in containerized environments where the rootfs is overlayfs.

Fix by reading TEST_TMPDIR at runtime and falling back to /var/tmp
when it is not set, consistent with how the shell test suite handles
this. Affected tests:
- tests/test-libarchive-import.c
- tests/test-basic-c.c

Signed-off-by: Igor Opaniuk <igor.opaniuk@foundries.io>
6 months agoMerge pull request #3572 from pvalena/patch-1
Colin Walters [Fri, 6 Mar 2026 14:21:25 +0000 (09:21 -0500)]
Merge pull request #3572 from pvalena/patch-1

boot/dracut: use systemdsystemunitdir instead of systemdsystemconfdir

6 months agoboot/dracut: use systemdsystemunitdir instead of systemdsystemconfdir
Pavel Valena [Fri, 6 Mar 2026 12:09:32 +0000 (13:09 +0100)]
boot/dracut: use systemdsystemunitdir instead of systemdsystemconfdir

since dracut-109 [*], the systemdsystemconfdir exists only in hostonly mode, which leads to unbootable system; as documented here:
https://src.fedoraproject.org/rpms/dracut/pull-request/90

[*] https://github.com/dracut-ng/dracut-ng/commit/2991f74a

7 months agoreleasing package ostree version 2025.7-3
Jeremy Bícha [Fri, 13 Feb 2026 20:16:01 +0000 (15:16 -0500)]
releasing package ostree version 2025.7-3

7 months agoMerge pull request #3569 from lxnay/main
Colin Walters [Mon, 9 Feb 2026 20:57:33 +0000 (15:57 -0500)]
Merge pull request #3569 from lxnay/main

status: Include deployment origin refspec as refspec in JSON output

7 months agostatus: Include deployment origin refspec as refspec in JSON output
Fabio Erculiani [Mon, 9 Feb 2026 14:31:47 +0000 (15:31 +0100)]
status: Include deployment origin refspec as refspec in JSON output

7 months agoRe-enable composefs support on architectures where it is available
Jeremy Bícha [Mon, 2 Feb 2026 15:52:59 +0000 (10:52 -0500)]
Re-enable composefs support on architectures where it is available

Revert "d/rules: Disable libcomposefs support"

This reverts commit 4087ee31f76d030e85b73e20e67329a5a2fd8f6e.

7 months agoUpdate list of architectures where gjs is available
Jeremy Bícha [Mon, 2 Feb 2026 15:51:21 +0000 (10:51 -0500)]
Update list of architectures where gjs is available

armel & ia64 are no longer Debian architectures
gjs is no longer buildable on powerpc

7 months agoreleasing package ostree version 2025.7-2
Jeremy Bícha [Mon, 2 Feb 2026 04:23:16 +0000 (23:23 -0500)]
releasing package ostree version 2025.7-2

7 months agolibostree-doc: Remove unnecessary Suggests: devhelp
Jeremy Bícha [Mon, 2 Feb 2026 04:20:14 +0000 (23:20 -0500)]
libostree-doc: Remove unnecessary Suggests: devhelp

devhelp is being removed from Debian
and there isn't a need to have a Suggests for its successor, manuals.

apt is currently configure to keep Suggests installed
so it is important that we remove obsolete Suggests

7 months agoBump Standards Version to 4.7.3
Jeremy Bícha [Mon, 2 Feb 2026 04:19:58 +0000 (23:19 -0500)]
Bump Standards Version to 4.7.3

7 months agoMerge pull request #3559 from cgwalters/archive-utf8
Colin Walters [Fri, 30 Jan 2026 14:20:06 +0000 (09:20 -0500)]
Merge pull request #3559 from cgwalters/archive-utf8

libarchive: Handle UTF-8 filenames without locale dependency

7 months agolibarchive: Handle UTF-8 filenames without locale dependency
Colin Walters [Thu, 8 Jan 2026 21:24:14 +0000 (16:24 -0500)]
libarchive: Handle UTF-8 filenames without locale dependency

When importing archives (including OCI container layers), libarchive
attempts to convert filenames from UTF-8 to the current locale charset.
In POSIX/C locale (which uses ASCII), this conversion fails for any
non-ASCII UTF-8 characters, returning ARCHIVE_WARN.

This is triggered by Python 3.14 which creates a "𝜋thon" symlink in
venvs, and affects bootc installations in environments where LANG is
not set (defaulting to POSIX locale).

Fix this by:

1. Using archive_entry_pathname_utf8() and archive_entry_symlink_utf8()
   which return UTF-8 directly without locale conversion

2. Falling back to the regular accessors with explicit UTF-8 validation
   when the _utf8 variants return NULL

3. Accepting ARCHIVE_WARN from archive_read_next_header() since we now
   validate UTF-8 ourselves rather than relying on libarchive charset
   conversion

This matches the behavior of GNU tar which treats filenames as opaque
bytes without charset conversion.

Closes: https://github.com/ostreedev/ostree/issues/3431
7 months agoMerge pull request #3562 from dustymabe/dusty-uid-0
Dusty Mabe [Mon, 19 Jan 2026 20:57:52 +0000 (15:57 -0500)]
Merge pull request #3562 from dustymabe/dusty-uid-0

ci: drop running COSA as UID 0

7 months agoci: drop cosa fetch
Dusty Mabe [Fri, 16 Jan 2026 16:58:39 +0000 (11:58 -0500)]
ci: drop cosa fetch

Now that we are building via container tools `cosa fetch` isn't
meaningful any longer.

7 months agoci: drop running COSA as UID 0
Dusty Mabe [Fri, 16 Jan 2026 02:48:43 +0000 (21:48 -0500)]
ci: drop running COSA as UID 0

With some changes made upstream to COSA [1] and a few fixups here
to make sure the directory tree for our built software doesn't have
setgid files we shouldn't need to runAsUser: 0 any longer.

[1] https://github.com/coreos/coreos-assembler/pull/4410

8 months agoMerge pull request #3556 from jmarrero/ci-fix
Colin Walters [Tue, 6 Jan 2026 23:24:29 +0000 (00:24 +0100)]
Merge pull request #3556 from jmarrero/ci-fix

ci: Sync bootc-ubuntu-setup action from bootc-dev/infra

9 months agoMerge pull request #3555 from jmarrero/overlay-fix
Joseph Marrero Corchado [Wed, 17 Dec 2025 19:27:16 +0000 (14:27 -0500)]
Merge pull request #3555 from jmarrero/overlay-fix

state-overlay: Fix ENODATA handling for GLib < 2.74

9 months agoci: Sync bootc-ubuntu-setup action from bootc-dev/infra
Joseph Marrero Corchado [Wed, 17 Dec 2025 18:15:44 +0000 (13:15 -0500)]
ci: Sync bootc-ubuntu-setup action from bootc-dev/infra

The CI was failing because we were pulling podman/crun/skopeo
from Debian testing which has become unreliable. The bootc-dev/infra
repository maintains a reusable action that uses Ubuntu's plucky
repository instead, which is more appropriate for ubuntu-24.04 runners.

This also brings in additional improvements from the shared action:
- Disk space cleanup on the runner
- Unprivileged /dev/kvm access setup
- Optional libvirt stack support

Assisted-by: ClaudeCode (Claude Opus 4.5)
9 months agostate-overlay: Fix ENODATA handling for GLib < 2.74
Joseph Marrero Corchado [Tue, 16 Dec 2025 19:30:47 +0000 (14:30 -0500)]
state-overlay: Fix ENODATA handling for GLib < 2.74

The state overlay feature fails on first boot with:

  error: lgetxattr(user.ostree.deploymentcsum): No data available

This happens because `lgetxattrat_allow_noent()` checks for
`G_IO_ERROR_INVALID_DATA` to detect when an xattr doesn't exist.
However, GLib's `g_io_error_from_errno()` only maps `ENODATA` to
`G_IO_ERROR_INVALID_DATA` since GLib 2.74. Older versions (such as
GLib 2.68 shipped in CentOS Stream 9) return `G_IO_ERROR_FAILED`
instead, causing the check to fail and the error to propagate.

This creates a chicken-and-egg problem: the code tries to read the
`user.ostree.deploymentcsum` xattr before it can set it, but the read
fails on fresh overlay directories where the xattr hasn't been set yet.

Fix this by checking `errno == ENODATA` directly after the failed call,
which is portable across all GLib versions. Also rename the function
from `lgetxattrat_allow_noent` to `lgetxattrat_allow_nodata` to more
accurately reflect its purpose (ENODATA vs ENOENT).

This bug has existed since the state overlay feature was introduced in
v2024.1 but was masked on systems with GLib >= 2.74 (e.g., Fedora,
CentOS Stream 10) where the mapping happens to exist.

Assisted-by: Claude Code (Opus 4.5)
Signed-off-by: Joseph Marrero Corchado <jmarrero@redhat.com>
10 months agoRelease to unstable
Simon McVittie [Mon, 17 Nov 2025 10:55:49 +0000 (10:55 +0000)]
Release to unstable

10 months agoNew upstream release
Simon McVittie [Mon, 17 Nov 2025 10:30:01 +0000 (10:30 +0000)]
New upstream release

10 months agoUpdate upstream source from tag 'upstream/2025.7'
Simon McVittie [Mon, 17 Nov 2025 10:28:14 +0000 (10:28 +0000)]
Update upstream source from tag 'upstream/2025.7'

Update to upstream version '2025.7'
with Debian dir 64e45057c7770cd95b7a6c6019f2a8f18a5e22c8

10 months agoNew upstream version 2025.7
Simon McVittie [Mon, 17 Nov 2025 10:28:07 +0000 (10:28 +0000)]
New upstream version 2025.7

10 months agoMerge pull request #3551 from jmarrero/release-20257
Colin Walters [Tue, 11 Nov 2025 22:46:06 +0000 (17:46 -0500)]
Merge pull request #3551 from jmarrero/release-20257

Release 2025.7

10 months agoconfigure: post-release version bump
Joseph Marrero Corchado [Mon, 10 Nov 2025 19:24:49 +0000 (14:24 -0500)]
configure: post-release version bump

10 months agoRelease 2025.7
Joseph Marrero Corchado [Mon, 10 Nov 2025 19:23:43 +0000 (14:23 -0500)]
Release 2025.7

10 months agootcore-prepare-root: Fix formatting with clang-format
Joseph Marrero Corchado [Mon, 10 Nov 2025 19:21:56 +0000 (14:21 -0500)]
otcore-prepare-root: Fix formatting with clang-format

10 months agoMerge pull request #3549 from cgwalters/fix-missing-colon
Colin Walters [Thu, 6 Nov 2025 21:02:02 +0000 (16:02 -0500)]
Merge pull request #3549 from cgwalters/fix-missing-colon

Add missing `:` to the gtk-doc in a few places

10 months agoAdd missing `:` to the gtk-doc in a few places
Colin Walters [Thu, 6 Nov 2025 19:35:04 +0000 (14:35 -0500)]
Add missing `:` to the gtk-doc in a few places

This is SUCH a giant trap. I am not totally sure why it's
working for me in a fedora-42 build env, but it seems like
it may have broken in a different build environment in
https://github.com/ostreedev/ostree/pull/3548#discussion_r2500278890

I used Sonnet to audit for similar instances beyond
`read_blob` and it found some, fix those too.

Signed-off-by: Colin Walters <walters@verbum.org>
10 months agoMerge pull request #3537 from alyssais/formatting
Colin Walters [Tue, 4 Nov 2025 18:10:57 +0000 (13:10 -0500)]
Merge pull request #3537 from alyssais/formatting

docs: fix formatting